import { IPSSysDBTable } from './ipssys-dbtable';
import { IPSSysSFPlugin } from '../res/ipssys-sfplugin';
import { IPSSysModelGroup } from '../system/ipssys-model-group';
import { IPSSystemModule } from '../system/ipssystem-module';
import { IPSModelObject } from '../ipsmodel-object';

/**
 *
 * @export
 * @interface IPSSysDBScheme
 */
export interface IPSSysDBScheme extends IPSModelObject {
  /**
   * 数据表集合
   *
   * @type {IPSSysDBTable[]}
   */
  getAllPSSysDBTables(): IPSSysDBTable[] | null;

  /**
   * 数据表集合
   *
   * @type {IPSSysDBTable[]}
   */
  get allPSSysDBTables(): IPSSysDBTable[] | null;

  findPSSysDBTable(objKey: any): IPSSysDBTable | null;

  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 代码名称2
   * @type {string}
   */
  codeName2: string;

  /**
   * 数据库实例标记
   * @type {string}
   */
  dBInstTag: string;

  /**
   * 默认数据源
   * @description 值模式 [云系统部署数据库模式] {DEFAULT：默认连接、 DB2：数据连接2、 DB3：数据连接3、 DB4：数据连接4、 DB5：数据连接5、 DB6：数据连接6、 DB7：数据连接7、 DB8：数据连接8、 DB9：数据连接9、 DB10：数据连接10、 DB11：数据连接11、 DB12：数据连接12 }
   * @type {( string | 'DEFAULT' | 'DB2' | 'DB3' | 'DB4' | 'DB5' | 'DB6' | 'DB7' | 'DB8' | 'DB9' | 'DB10' | 'DB11' | 'DB12')}
   */
  dSLink: string | 'DEFAULT' | 'DB2' | 'DB3' | 'DB4' | 'DB5' | 'DB6' | 'DB7' | 'DB8' | 'DB9' | 'DB10' | 'DB11' | 'DB12';

  /**
   * 系统模型组
   *
   * @type {IPSSysModelGroup}
   */
  getPSSysModelGroup(): IPSSysModelGroup | null;

  /**
   * 系统模型组
   *
   * @type {IPSSysModelGroup}
   */
  get psSysModelGroup(): IPSSysModelGroup | null;

  /**
   * 系统模型组（必须存在）
   *
   * @type {IPSSysModelGroup}
   */
  getPSSysModelGroupMust(): IPSSysModelGroup;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  get psSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件（必须存在）
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPluginMust(): IPSSysSFPlugin;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  get psSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块（必须存在）
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModuleMust(): IPSSystemModule;

  /**
   * SaaS数据租户列
   * @type {string}
   */
  saaSDCIdColumnName: string;

  /**
   * SaaS数据主键列
   * @type {string}
   */
  saaSDataIdColumnName: string;

  /**
   * 体系标记
   * @type {string}
   */
  schemeTag: string;

  /**
   * 体系标记2
   * @type {string}
   */
  schemeTag2: string;

  /**
   * 自动扩展结构
   * @type {boolean}
   * @default false
   */
  autoExtendModel: boolean;

  /**
   * 现有数据结构
   * @type {boolean}
   * @default false
   */
  existingModel: boolean;

  /**
   * 发布索引
   * @type {boolean}
   * @default false
   */
  pubIndex: boolean;
}
